﻿
(function ($) {

    //
    // Каталог автомобилей
    //
    function GetCarCatalogue(vdiv) {
        var pager = $('#' + vdiv + 'Pager');
        var el_vend_id;
        var el_model_id;
        var el_color_id;
        var el_vend_name;
        var el_model_name;
        var el_color_name;
        var el_engine;
        var gritab;
        var col_order = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
        var col_names = ['ID', 'Марка(ID)', 'Марка', 'Модель(ID)', 'Модель', 'Цвет(ID)', 'Цвет',
                        'Двигатель', 'Цена', 'Комментарий'];
        var col_model = [
		{ name: 'id', index: 'car_id', hidden: true, width: 50, editable: false, fixed: true },
		{ name: 'vend_id', index: 'vend_id', hidden: true, width: 50, editable: true,
		    editoptions: { maxlength: "16", dataInit: function (el) { el_vend_id = el; } }
		},
		{ name: 'vend_name', index: 'vend_name', hidden: false, width: 150, editable: true,
		    editoptions: { maxlength: "50", dataInit: SetVendorHack }
		},
		{ name: 'model_id', index: 'model_id', hidden: true, width: 50, editable: true,
		    editoptions: { maxlength: "16", dataInit: function (el) { el_model_id = el; } }
		},
		{ name: 'model_name', index: 'model_name', hidden: false, width: 150, editable: true,
		    editoptions: { maxlength: "50", dataInit: SetModelHack }
		},
		{ name: 'color_id', index: 'color_id', hidden: true, width: 50, editable: true,
		    editoptions: { maxlength: "16", dataInit: function (el) { el_color_id = el; } }
		},
		{ name: 'color_name', index: 'color_name', hidden: false, width: 200, editable: true,
		    editoptions: { maxlength: "50", dataInit: SetColorHack }
		},
		{ name: 'engine', index: 'engine', hidden: false, width: 100, editable: true,
		    editoptions: { maxlength: "50", dataInit: function (el) { el_engine = el; } }
		},
        { name: 'price', index: 'price', hidden: false, width: 100, editable: false
        },
		{ name: 'comment', index: 'comment', hidden: false, width: 200, editable: true,
		    editoptions: { maxlength: "255" }
		}
    ];
        var jqgo = {
            url: 'cars_cb.aspx',
            editurl: 'cars_cb.aspx',
            datatype: 'json',
            postData: { source: 'CarCatalogue' },
            emptyrecords: true,
            autowidth: false,
            //		    scrollOffset: 22,
            gridview: true,
            hidegrid: false,
            hoverrows: true,
            recordpos: 'right',
            scrollrows: true,
            multiselect: true,
            multiselectWidth: 40,
            multiboxonly: true,
            mtype: 'POST',
            shrinkToFit: true,
            colNames: col_names,
            colModel: col_model,
            page: 1,
            pager: pager,
            pagerpos: 'right',
            rowNum: 10,
            rowList: [10, 50, 200],
            //		    viewrecords: true,
            loadui: 'disable',
            toolbar: [false, 'top'],
            filterbar: false,
            height: 220,
            //		    width: 350,
            sortname: 'vend_name',
            sortorder: 'asc',
            sortable: true,
            caption: '',
            loadError: function () {
                alert("Ошибка загрузки даных");
            },
            loadComplete: function (data) {
                if (!$.isPlainObject(data)) {
                    alert("Ваша сессия закончилась по таймауту.\nПожалуйста перерегистрируйтесь.");
                }
                if ($.browser.msie || $.browser.webkit) {
                    //                $('#'+vdiv+' tr.jqgrow td').css({'line-height':'16px'});
                    $('#' + vdiv + ' tr.jqgrow td').height(21);
                }

                var id_col = $('#' + vdiv + ' td[aria-describedby="' + vdiv + '_id"]');
                var price_col = $('#' + vdiv + ' td[aria-describedby="' + vdiv + '_price"]');
                if (price_col) {

                    for (var i = 0; i < id_col.length; i++) {
                        $(price_col[i]).click({ vdiv: 'CarPrice', car_id: $(id_col[i]).text() }, function (ev) {
                            app.ShowPriceHistory(ev.data.vdiv, ev.data.car_id);
                        });
                    }

                    price_col.css({ 'text-decoration': 'underline', 'cursor': 'pointer' });
                }
            },
            ondblClickRow: function (id) {
                $('#' + vdiv).jqGrid('editGridRow', id,
                {
                    modal: true,
                    jqModal: true,
                    zIndex: app.jqgrid_form_min_z_index,
                    closeOnEscape: true,
                    editData: { source: 'CarCatalogue' },
                    afterShowForm: function () { $('div#editmod' + vdiv).shadow() },
                    afterSubmit: responseOnSubmit,
                    viewPagerButtons: false,
                    closeAfterEdit: true
                }
                );
            }

        };
        // Создадим jqGrid
        gritab = $('#' + vdiv).jqGrid(jqgo);

        // Индикация ошибок добавления, ред., удал.
        function responseOnSubmit(response, postdata) {
            var rsp = $.parseJSON(response.responseText);
            var success = true;
            var msg = '';

            if (rsp.errcode) {
                success = false;
                msg = rsp.errmess;
                if (rsp.errcode == '999') {
                    alert("Ваша сессия закончилась по таймауту.\nПожалуйста перерегистрируйтесь.");
                    document.location = 'Default.aspx';
                }
            }
            return [success, msg];
        }

        // Навигатор - обновить
        gritab.jqGrid('navGrid', '#' + vdiv + 'Pager',
        // Параметры инструментов
    {
    add: true, del: true, edit: true, search: false,
    afterRefresh: function () { gritab.resetSelection(); }
},
        // Параметры редактирования
    {
    modal: true,
    jqModal: true,
    zIndex: app.jqgrid_form_min_z_index,
    //        savekey: [true, 13],
    closeOnEscape: true,
    editData: { source: 'CarCatalogue' },
    afterShowForm: function () { $('div#editmod' + vdiv).shadow() },
    afterSubmit: responseOnSubmit,
    viewPagerButtons: false,
    closeAfterEdit: true
},
        // Параметры добавления
    {
    modal: true,
    jqModal: true,
    zIndex: app.jqgrid_form_min_z_index,
    //        savekey: [true, 13],
    closeOnEscape: true,
    editData: { source: 'CarCatalogue' },
    afterShowForm: function () { $('div#editmod' + vdiv).shadow() },
    /*
    afterShowForm: function (frm) {
    var e = $(frm[0].vend_name);
    var eid = e.attr('id') + '_vend_name_bg';
    var prnt = e.parent();
    var p = e.position();
    var h = e.height();
    var w = e.width();

    var bg = '<div id="' + eid + '" style="border:1px solid red; position:absolute; top:' + p.top +
    'px; left:' + p.left + 'px;">Hello,world</div>';
    prnt.prepend(bg);
    $('#' + eid).height(h);
    $('#' + eid).width(w);
    e.css({'position':'absolute','top':p.top,'left':p.left,'z-index':5});
    $('#' + eid).css({ 'z-index': '0','color':'silver' });
    },
    */
    afterSubmit: responseOnSubmit
},
        // Параметры удаления
    {
    modal: true,
    jqModal: true,
    width: 'auto',
    zIndex: app.jqgrid_form_min_z_index,
    closeOnEscape: true,
    delData: { source: 'CarCatalogue' },
    afterShowForm: function () {
        $('div#delmod' + vdiv).shadow();
        $('#DelTbl_' + vdiv + ' tr:eq(2) td').html(
            '<p style="font-weight:700; text-align:center;">ВНИМАНИЕ !!!</p>' +
            'Удаление записи(сей)  в этой таблице повлечет за собой<br>' +
            'удаление соответствующих записей в таблице "Архив цен"' +
            '<p style="text-align:center;">Выполнить удаление ?</p>'
        );
    },
    afterSubmit: responseOnSubmit
}

);
/*
        // Пользовательский навигатор - вкл/выкл. тулбар фильтра
        gritab.jqGrid('navButtonAdd', '#' + vdiv + 'Pager', {
            caption: '',
            title: 'Включить тулбар фильтра',
            buttonicon: 'ui-icon-search',
            onClickButton: function () {
                gritab.setGridParam({ filterbar: !gritab.getGridParam('filterbar') });
                gritab[0].toggleToolbar();
            }
        });
*/
        gritab.filterToolbar({ searchOnEnter: false, afterSearch: function () { } });

        function SetVendorHack(el) {
            el_vend_name = el;
            $(el).autocomplete({
                source: function (request, responce) {
                    $.post('callbacks.aspx', { source: 'VendorDictionary', oper: 'find', term: request.term },
            function (rsp, textStatus) {
                if (rsp.errcode) {
                    if (rsp.errcode == '999') { alert(rsp.errmess); location.href = 'Default.aspx'; }
                    else app.alert('AlertDlg', 'Ошибка', rsp.errmess, 'ipdepo-icon-stop32');
                    responce();
                    return;
                }
                if (rsp.data) {
                    responce($.map(rsp.data, function (item) {
                        return { label: item.name, value: item.value }
                    }));
                    return;
                }
                responce();
            }, 'json');
                },
                minLength: 2, autoFocus: true,
                focus: function (event, ui) { $(el).val(ui.item.label); return false; },
                select: function (event, ui) {
                    $(el).val(ui.item.label);
                    $(el_vend_id).val(ui.item.value);
                    $(el_model_name).val("");
                    $(el_model_id).val("");
                    return false;
                }
            });
        }

        function SetModelHack(el) {
            el_model_name = el;
            $(el).autocomplete({
                source: function (request, responce) {
                    $.post('callbacks.aspx', { source: 'ModelDictionary', oper: 'find', term: request.term, vend_id: $(el_vend_id).val() },
            function (rsp, textStatus) {
                if (rsp.errcode) {
                    if (rsp.errcode == '999') { alert(rsp.errmess); location.href = 'Default.aspx'; }
                    else app.alert('AlertDlg', 'Ошибка', rsp.errmess, 'ipdepo-icon-stop32');
                    responce();
                    return;
                }
                if (rsp.data) {
                    responce($.map(rsp.data, function (item) {
                        return { label: item.name, value: item.value }
                    }));
                    return;
                }
                responce();
            }, 'json');
                },
                minLength: 2, autoFocus: true,
                focus: function (event, ui) { $(el).val(ui.item.label); return false; },
                select: function (event, ui) {
                    $(el).val(ui.item.label);
                    $(el_model_id).val(ui.item.value);
                    return false;
                }
            });
        }

        function SetColorHack(el) {
            el_color_name = el;
            $(el).autocomplete({
                source: function (request, responce) {
                    $.post('callbacks.aspx', { source: 'ColorDictionary', oper: 'find', term: request.term },
            function (rsp, textStatus) {
                if (rsp.errcode) {
                    if (rsp.errcode == '999') { alert(rsp.errmess); location.href = 'Default.aspx'; }
                    else app.alert('AlertDlg', 'Ошибка', rsp.errmess, 'ipdepo-icon-stop32');
                    responce();
                    return;
                }
                if (rsp.data) {
                    responce($.map(rsp.data, function (item) {
                        return { label: item.name, value: item.value }
                    }));
                    return;
                }
                responce();
            }, 'json');
                },
                minLength: 2, autoFocus: true,
                focus: function (event, ui) { $(el).val(ui.item.label); return false; },
                select: function (event, ui) {
                    $(el).val(ui.item.label);
                    $(el_color_id).val(ui.item.value);
                    return false;
                }
            });
        }

        return gritab;
    };  // End of create function definition


    app.ShowCarCatalogue = function (dlgID) {
        var TabObj;
        var aldlg = $('#' + dlgID);
        var TabID = dlgID + 'Tab';

        if ($('#' + TabID).length) return;

        aldlg.html('<table id="' + TabID + '"></table><div id="' + TabID + 'Pager"></div>');

        TabObj = GetCarCatalogue(TabID);

        aldlg.dialog(
        {
            modal: false, title: 'Каталог автомобилей',
            height: 'auto',
            width: 'auto',
            autoOpen: false,
            resizable: false,
            zIndex: app.ui_dialog_min_z_index,
            open: function () { $('div[aria-labelledby="ui-dialog-title-' + dlgID + '"]').shadow() },
            close: function () {
                aldlg.dialog("destroy");
                if (TabObj) TabObj.GridDestroy(TabID);
                $.ui.dialog.maxZ = $.maxZIndex({ group: '.ui-dialog.ui-widget' });
            }
        }
    );

        aldlg.dialog('open');
    }


    //
    // Цены
    //
    function GetPriceHistory(vdiv, vcar_id) {
        var el_vend_id;
        var pager = $('#' + vdiv + 'Pager');
        var gritab;
        var col_order = [0, 1, 2, 3, 4];
        var col_names = ['ID', 'Авто(ID)', 'Дата', 'Цена', 'Активна'];
        var col_model = [
		{ name: 'id', index: 'price_id', hidden: true, width: 50, editable: false, fixed: true },
		{ name: 'car_id', index: 'car_id', hidden: true, width: 50, editable: false, fixed: true },
		{ name: 'setdate', index: 'setdate', hidden: false, width: 150, editable: true,
		    editoptions: { maxlength: "50" }
		},
		{ name: 'price', index: 'price', hidden: false, width: 150, editable: true, editoptions: { maxlength: "50"} },
		{ name: 'active', index: 'active', hidden: false, width: 100,
		    editable: true, edittype: 'checkbox', editoptions: { value: "1:0", defaultValue: "1" },
		    formatter: function (cellvalue, options, rowObject) {
		        return (cellvalue == '1') ? '<span cellval="1" class="ui-icon ui-icon-pin-s"></span>' : '<span cellval="0"></span>'
		    },
		    unformat: function (cellvalue, options, cell) { return $('span', cell).attr('cellval'); }
		}
    ];
        var jqgo = {
            url: 'cars_cb.aspx',
            editurl: 'cars_cb.aspx',
            datatype: 'json',
            postData: { source: 'CarPrice', fcar_id: vcar_id },
            emptyrecords: true,
            autowidth: false,
            //		    scrollOffset: 22,
            gridview: true,
            hidegrid: false,
            hoverrows: true,
            recordpos: 'right',
            scrollrows: true,
            multiselect: true,
            multiselectWidth: 40,
            multiboxonly: true,
            mtype: 'POST',
            shrinkToFit: true,
            colNames: col_names,
            colModel: col_model,
            page: 1,
            pager: pager,
            pagerpos: 'right',
            rowNum: 5,
            rowList: [5, 10, 20],
            //		    viewrecords: true,
            loadui: 'disable',
            toolbar: [false, 'top'],
            filterbar: false,
            height: 110,
            //		    width: 350,
            sortname: 'setdate',
            sortorder: 'desc',
            sortable: true,
            caption: '',
            loadError: function () {
                alert("Ошибка загрузки даных");
            },
            loadComplete: function (data) {
                if (!$.isPlainObject(data)) {
                    alert("Ваша сессия закончилась по таймауту.\nПожалуйста перерегистрируйтесь.");
                }
                if ($.browser.msie || $.browser.webkit) {
                    //                $('#'+vdiv+' tr.jqgrow td').css({'line-height':'16px'});
                    $('#' + vdiv + ' tr.jqgrow td').height(21);
                }
            },
            ondblClickRow: function (id) {
                $('#' + vdiv).jqGrid('editGridRow', id,
                {
                    modal: true,
                    jqModal: true,
                    zIndex: app.jqgrid_form_min_z_index,
                    closeOnEscape: true,
                    editData: { source: 'CarPrice', fcar_id: vcar_id },
                    afterShowForm: function (fm) {
                        var el = fm.find('#setdate');
                        BindCalendar(fm, el);
                        $('div#editmod' + vdiv).shadow();
                    },
                    afterSubmit: responseOnSubmit,
                    viewPagerButtons: false,
                    closeAfterEdit: true
                }
                );
            }
        };

        // Создадим jqGrid
        gritab = $('#' + vdiv).jqGrid(jqgo);

        // Индикация ошибок добавления, ред., удал.
        function responseOnSubmit(response, postdata) {
            var rsp = $.parseJSON(response.responseText);
            var success = true;
            var msg = '';

            if (rsp.errcode) {
                success = false;
                msg = rsp.errmess;
                if (rsp.errcode == '999') {
                    alert("Ваша сессия закончилась по таймауту.\nПожалуйста перерегистрируйтесь.");
                    document.location = 'Default.aspx';
                }
            }
            return [success, msg];
        }

        // Навигатор - обновить
        gritab.jqGrid('navGrid', '#' + vdiv + 'Pager',
        // Параметры инструментов
    {
    add: true, del: true, edit: true, search: false, refresh: true,
    afterRefresh: function () { gritab.resetSelection(); }
},
        // Параметры редактирования
{
modal: true,
jqModal: true,
zIndex: app.jqgrid_form_min_z_index,
//    savekey: [true, 13],
closeOnEscape: true,
editData: { source: 'CarPrice', fcar_id: vcar_id },
afterShowForm: function (fm) {
    var el = fm.find('#setdate');
    BindCalendar(fm, el);
    $('div#editmod' + vdiv).shadow();
},
afterSubmit: responseOnSubmit,
viewPagerButtons: false,
closeAfterEdit: true
},
        // Параметры добавления
{
modal: true,
jqModal: true,
zIndex: app.jqgrid_form_min_z_index,
//    savekey: [true, 13],
closeOnEscape: true,
editData: { source: 'CarPrice', fcar_id: vcar_id },
afterShowForm: function (fm) {
    var el = fm.find('#setdate');
    el.val($.datepicker.formatDate('dd.mm.yy', new Date()));
    BindCalendar(fm, el);
    $('div#editmod' + vdiv).shadow();
},
afterSubmit: responseOnSubmit
},
        // Параметры удаления
{
modal: true,
jqModal: true,
zIndex: app.jqgrid_form_min_z_index,
closeOnEscape: true,
delData: { source: 'CarPrice', fcar_id: vcar_id },
afterShowForm: function () { $('div#delmod' + vdiv).shadow() },
afterSubmit: responseOnSubmit
}

);
/*
        // Пользовательский навигатор - вкл/выкл. тулбар фильтра
        gritab.jqGrid('navButtonAdd', '#' + vdiv + 'Pager', {
            caption: '',
            title: 'Включить тулбар фильтра',
            buttonicon: 'ui-icon-search',
            onClickButton: function () {
                gritab.setGridParam({ filterbar: !gritab.getGridParam('filterbar') });
                gritab[0].toggleToolbar();
            }
        });
*/
        gritab.filterToolbar({ searchOnEnter: false, afterSearch: function () { } });

        $("#gview_" + vdiv + " #gs_setdate").datepicker({
            dateFormat: "yy-mm-dd",
            showOn: "button",
            buttonImage: "img/calendar2.png",
            buttonImageOnly: true,
            buttonText: "Календарь",
            changeMonth: true,
            changeYear: true,
            onSelect: function (dateText) {
                $(this).focus();
                $(this).keydown();
            }
        });

        $("#gview_" + vdiv + " .ui-datepicker-trigger")
    .css({ 'cursor': 'pointer', 'position': 'relative', 'left': '-18px', 'top': '3px' });

        $("#gview_" + vdiv + " #gs_setdate").attr("title", "Формат ввода: 'гггг-мм-дд'");
        $("#gview_" + vdiv + " #gs_active").attr("title", "1-активная цена, 0-все кроме ативной");

        function BindCalendar(fm, el) {
            el.datepicker({
                dateFormat: "dd.mm.yy",
                showOn: "button",
                buttonImage: "img/calendar2.png",
                buttonImageOnly: true,
                buttonText: "Календарь",
                changeMonth: true,
                changeYear: true
                //                onSelect: function (dateText) {
                //                    $(this).focus();
                //                    $(this).keydown();
                //                }
            });

            fm.find(".ui-datepicker-trigger")
                .css({ 'cursor': 'pointer', 'position': 'relative', 'left': '-18px', 'top': '3px' });
        }

        return gritab;
    };  // End of create function definition


    app.ShowPriceHistory = function (dlgID, car_id) {
        var TabObj;
        var aldlg = $('#' + dlgID);
        var TabID = dlgID + 'Tab';
        var newdlg = $('#' + TabID).length ? false : true;

        if ($('#' + TabID).length) return;

        aldlg.html('<table id="' + TabID + '"></table><div id="' + TabID + 'Pager"></div>');

        TabObj = GetPriceHistory(TabID, car_id);

        aldlg.dialog(
        {
            modal: false, title: 'Архив цен',
            height: 'auto',
            width: 'auto',
            autoOpen: false,
            resizable: false,
            zIndex: app.ui_dialog_min_z_index,
            open: function () { $('div[aria-labelledby="ui-dialog-title-' + dlgID + '"]').shadow() },
            close: function () {
                aldlg.dialog("destroy");
                if (TabObj) TabObj.GridDestroy(TabID);
                $.ui.dialog.maxZ = $.maxZIndex({ group: '.ui-dialog.ui-widget' });
            }
        }
    );

        aldlg.dialog('open');
    }

    // ---------------------------------------------------------------------------
})(jQuery);
